颱風開始向北走了,我們繼續看看颱風警報的資料吧。
師傅:今天我們來學 jq 的 字串切片(Slice) 和分割(Split)。準備好了嗎?
徒弟:呃...是的,師傅。我會盡力跟上的。
師傅:好。先看切片(Slice)。
徒弟:切片?是指 .fixTime[0:13]
嗎?
師傅:對。效果?
徒弟:呃...是取 fixTime 的前 13 個字,把時間顯示縮短到小時?
師傅:沒錯。現在再看分割(Split)。
徒弟:哦,是 split(\",\")
對吧?
師傅:嗯。.coordinate|split(\",\")[0]
用途?
徒弟:這是...先把 coordinate 用逗號分開,然後取第一部分,也就是經度?
師傅:正確。那緯度呢?
徒弟:應該是 .coordinate|split(\",\")[1]
吧?
師傅:正確。組合起來。
徒弟:讓我試試... .fixTime[0:13], (.coordinate | split(\",\")[0]), (.coordinate | split(\",\")[1])
這樣?
師傅:👍
在 jq 中,array/string slice 是用來從陣列或字串中提取一部分內容的語法。用法和使用索引提取陣列元素一樣,只是多使用 :
取得範圍。
從第 0 個位置開始,到第 13 個位置之前 |
---|
jq -c '.[0:13]' |
在 jq 中,split({分割字})
用於將字串按指定的分隔符拆分成陣列。剛好可以用來分割經度和緯度。
今天學到了字串的 Slice 和 Split,很實用,正好可以應用在颱風消息的時間和經緯度欄位上。slice要注意的部分就是索引範圍了,從0起跳,結尾索引不包含在內;split要注意的,是引號 😝,像我切換於命令提示字元和 jqplay 工具之間,就遇到不少次引號的差異問題。今天對話中還有一個新用法,就是 ()
括弧內的優先運算,如 (.coordinate | split(\",\")[0])
。
感謝今天自己認真學習😄。山陀兒颱風已經是強颱了,注意安全,祝平安。
既然經度和緯度都會用到,可以更懶惰一點,把 split
的結果直接傳遞給下一步唷。
.coordinate | split(",") | {longitude: .[0], latitude: .[1]}